package org.tech4j.edi.persistence.api;

import org.tech4j.common.core.model.page.PageQuery;
import org.tech4j.common.core.model.page.PageResult;
import org.tech4j.edi.common.entity.RetryBizConfig;
import org.tech4j.edi.common.result.EdiResult;
import org.tech4j.edi.persistence.api.query.RetryConfigQuery;
import org.tech4j.edi.persistence.api.query.RetryCountQuery;

import java.util.List;

/**
 * @program: tech4j
 * @description:
 * @author: YuKai Fan
 * @create: 2025/3/7 15:05
 **/
public interface RetryConfigPersistService {

    /**
     * 新增重试配置
     * @param retryBizConfig
     * @return
     */
    EdiResult<String> addRetryConfig(RetryBizConfig retryBizConfig);

    /**
     * 编辑重试配置
     * @param retryBizConfig
     * @return
     */
    EdiResult<Void> updateRetryConfig(RetryBizConfig retryBizConfig);

    /**
     * 删除重试配置
     * @param id
     * @return
     */
    EdiResult<Void> deleteRetryConfig(String id);

    /**
     * 根据id查询重试配置
     * @param id
     * @return
     */
    EdiResult<RetryBizConfig> getRetryConfigById(String id);


    /**
     * 根据id查询重试配置
     * @param query RetryConfigQuery
     * @return
     */
    EdiResult<RetryBizConfig> getOneRetryConfig(RetryConfigQuery query);

    /**
     * 启动配置
     * @param id
     */
    EdiResult<Void> startRetryConfig(String id);

    /**
     * 停用配置
     * @param id
     */
    EdiResult<Void> stopRetryConfig(String id);

    /**
     * 查询重试配置列表
     * @param query
     * @return
     */
    List<RetryBizConfig> list(RetryConfigQuery query);

    /**
     * 统计
     * @param query
     * @return
     */
    Long count(RetryConfigQuery query);

    /**
     * 分页查询重试配置
     * @param query
     * @param configQuery
     * @return
     */
    PageResult<RetryBizConfig> page(PageQuery query, RetryConfigQuery configQuery);
}
